<?php
/**
* Calendar Helper for CakePHP
*
*	Copyright 2008 John Elliott
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
*
* @author John Elliott
* @copyright 2008 John Elliott
* @link http://www.flipflops.org More Information
* @license			http://www.opensource.org/licenses/mit-license.php The MIT License
*
*/

class TurnosHelper extends Helper
{

	var $helpers = array('Form', 'Html', 'Javascript', 'Ajax');
   
/**
* Generates a Calendar for the specified by the month and year params and populates it with the content of the data array
*
* @param $year string
* @param $month string
* @param $data array
* @return string HTML code to display calendar in view
*
*/
	

	function semanal($anio = null, $mes = null, $dia = null, $id_profesional = null, $data = null, $config_agenda = null, $feriados = null, $AgendaSemanal= null){
	   
       //pr($config_agenda);

         
		//-----------------------------------------------------------------------------------
		//- Armo un array con clave nro.de.dia de la semana para poder contar la cantidad 
		//  de turnos dados ese dia y saber si puedo dar mas segun si acepta o no sobreturnos
		//------------------------------------------------------------------------------------
		$intervalo_horario = 9999999;
		$horario_comienzo  = 9999999;
		$horario_fin       = 0;
		if($AgendaSemanal){
			foreach($AgendaSemanal as $clave=>$valor){
				foreach($valor as $indice=>$ca){
					// Convierto la hora de comienzo del Segmento en minutos
					$min_comienzo_segmento = $ca['horario_comienzo'];
					$min_fin_segmento      = $ca['horario_fin'];

					// Defino el Intervalo minimo de Segmento
					if(!empty($ca['duracion']) AND $ca['duracion'] < $intervalo_horario){
						$intervalo_horario = $ca['duracion'];
					}

					// Defino el Horario minimo del Día
					if($min_comienzo_segmento < $horario_comienzo){
						$horario_comienzo = $min_comienzo_segmento;
					}
					if($min_fin_segmento > $horario_fin){
						$horario_fin = $min_fin_segmento;
					}
			
			
					$registro_segmento['comienzo_segmento']   = $ca['horario_comienzo'];
					$registro_segmento['fin_segmento']        = $ca['horario_fin'] ;
					$registro_segmento['duracion_segmento']   = $ca['duracion'] ;
					$registro_segmento['sobreturno_segmento'] = $ca['sobreturno'];

					$arreglo_conf_agenda[$clave][$indice] = $registro_segmento; 
				}	
			} //end foreach
		} // endif is AgendaSemanal

//pr($AgendaSemanal);
//pr($arreglo_conf_agenda);
//die();


		/* ----------------------------------------------------------------------------- */
		/* Obtengo los Feriados de la Semana											 */
		/* ----------------------------------------------------------------------------- */

			if(!empty($feriados)){
				foreach($feriados AS $registro){
					$fecha_mes_dia = substr($registro['Feriado']['fecha'],5);
					$arreglo_feriados[$fecha_mes_dia] = $registro['Feriado']['name'];
				}
			}

		/* ----------------------------------------------------------------------------- */

		// Defino los parametros generales del calendario semanal
		$day_list_esp = array('Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom');
		$str = '';

		// Defino la Semana de que fecha a que fecha esta definida
		$en_que_dia_de_la_semana_cae = date('w', mktime(0,0,0, $mes, $dia, $anio)); 

		if($en_que_dia_de_la_semana_cae == 0){ // Si es Domingo
			$semana_comenza       = date("j",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae, $anio));
			$leyenda_rango_semana = 'Semana del '.date("d/m/Y",mktime(0,0,0,$mes, $dia - 6, $anio)).' al '.date("d/m/Y",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae, $anio));
		}else{
			$semana_comenza       = date("j",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1, $anio));
			$leyenda_rango_semana = 'Semana del '.date("d/m/Y",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1, $anio)).' al '.date("d/m/Y",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + 6, $anio));
		}

		$str .= '
			<!-- <div>
				<div style="float:left; padding: 10px;"><h1>'.$leyenda_rango_semana.'</h1></div>
				
			</div> -->
			<table class="calendar">
			<thead>
			  <tr>
				<th class="cell-header">&nbsp;</th>
		';

		// Muestro el encabezado del calendario semanal
		for($i = 0; $i < 7;$i++) {

			$class = ' class="cell-header" ';

			if($en_que_dia_de_la_semana_cae == 0){ // Si es Domingo
				$encabezado_dia_semana         = date("j",mktime(0,0,0,$mes, $dia - 6 + $i, $anio));
				$arreglo_dias[$i]              = date("Y-m-d",mktime(0,0,0,$mes, $dia - 6 + $i, $anio));
				$arreglo_dias_puro[$i]         = date("Ymd",mktime(0,0,0,$mes, $dia - 6 + $i, $anio));
				$arreglo_dias_controlador[$i]  = date("Y/m/d",mktime(0,0,0,$mes, $dia - 6 + $i, $anio));
				$arreglo_mes_dias_feriados[$i] = date("m-d",mktime(0,0,0,$mes, $dia - 6 + $i, $anio));

				if($i == 6){
					$class = ' class="cell-today" ';
				}

			}else{
				$encabezado_dia_semana         = date("j",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
				$arreglo_dias[$i]              = date("Y-m-d",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
				$arreglo_dias_puro[$i]         = date("Ymd",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
				$arreglo_dias_controlador[$i]  = date("Y/m/d",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
				$arreglo_mes_dias_feriados[$i] = date("m-d",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));

				if($i == ($en_que_dia_de_la_semana_cae-1)){
					$class = ' class="cell-today" ';
				}
			}
            $encabezado_mes = date("m",mktime(0,0,0,$mes, $dia - $en_que_dia_de_la_semana_cae + 1 + $i, $anio));
			// Si el Dia es Feriado
			if(isset($arreglo_feriados[$arreglo_mes_dias_feriados[$i]])){
				$class = ' class="cell-dia-feriado" ';
				$detalle_feriado = "<br>".$arreglo_feriados[$arreglo_mes_dias_feriados[$i]];
			}else{
				$detalle_feriado = "";
			}

         
			$str .= '<th '.$class.'>'.$day_list_esp[$i] . ' '.$encabezado_dia_semana." /$encabezado_mes".$detalle_feriado.'</th>';
		}
//pr($arreglo_dias);		
//pr($AgendaSemanal);	
//pr($data);			
		$str .= '
			  </tr>
			</thead>
			<tbody>
		';

		// Muestro los horarios y las celdas a la derecha de los horarios
		for($i = $horario_comienzo; $i <= $horario_fin;$i=$i+$intervalo_horario) {
			$str .= '
				  <tr> 
					<td class="cell-horario">'.date("H:i",mktime(0,$i,0,0,0,0)).'</td>
			';

			// Cargo la Celda de cada día y horario	
			for($j=0; $j < 7; $j++){

				/*----------------------------------------------------------------------------*/
				/* Determino cual es el Segmento Actual										  */
				/*----------------------------------------------------------------------------*/

					$segmento_actual = array();

					if(!empty($arreglo_conf_agenda[$j+1])){

						// Si existe más de un Segmento en el día
						if(count($arreglo_conf_agenda[$j+1]) > 1){

							for($indice = 0; $indice < count($arreglo_conf_agenda[$j+1]) ; $indice++ ){

								if($arreglo_conf_agenda[$j+1][$indice]['comienzo_segmento'] <= $i AND $arreglo_conf_agenda[$j+1][$indice]['fin_segmento'] >= $i){
									$segmento_actual = $arreglo_conf_agenda[$j+1][$indice];
									break;
								}
							}

						}else{ // Si existe un solo Segmento en el día
							$segmento_actual = $arreglo_conf_agenda[$j+1][0];
						}
					}

				/*----------------------------------------------------------------------------*/
//echo $j; pr($segmento_actual);
				// Inicializo la Celda
				$cell = '';
				$class = " class='cell-header-dia' ";

				if("$anio-$mes-$dia" == $arreglo_dias[$j]){
					//$class = ' class="cell-dia-today" ';
				}

				// Armo el indice para saber si existen datos para el horario especificado
				$fecha_completa_verificar = $arreglo_dias[$j]." ".date("H:i",mktime(0,$i,0,0,0,0)).":00";

				// Determino si alguna de las fechas a mostrar son anteriores a HOY
				if(strftime($arreglo_dias[$j]) < strftime(date("Y-m-d"))){
					$disabledCell = true;
                    $class = 'class="cell-dia-disabled"';
				}else{
					$disabledCell = false;
				}
				
				$nombre_div = 'alta_turno_calendario_'.$arreglo_dias_puro[$j].date("Hi",mktime(0,$i,0,0,0,0));
				
				// Si hay datos para el día y horario, lo muestro
				if( isset($data[$fecha_completa_verificar]) ){ 
					
					/// El turno esta ocupado, puedo darle un sobreturno ???
					$admite_sobreturno = false;
					foreach($AgendaSemanal as $clave=>$valor){
						foreach($valor as $key=>$value){
							// Pertenece a este segmento ?
							if($fecha_completa_verificar>=strftime($value['dia_desde']) AND $fecha_completa_verificar<=strftime($value['dia_hasta']) ) {
								if ($value['ortoga_sobreturnos']=='S'){
									$admite_sobreturno = true;
									break;
								}
							}
						}
					}
				
					if($admite_sobreturno==true){
						$str .= "<td $class 
								onmouseover=\"document.getElementById('$nombre_div').style.display='block';\" 
                                onmouseout=\"document.getElementById('$nombre_div').style.display='none';\">$cell
                                <div id='$nombre_div' style='display:none;text-align:center;'>
									<a href=\"javascript:MostrarModal('ventana_modal','Carga de Turno','/turnos/add/{$arreglo_dias_controlador[$j]}".date("/H/i",mktime(0,$i,0,0,0,0))."/$id_profesional/S',440,400)\">
                                    Solicitar Turno</a>
								</div></td>";
						
					} else {
						$cell = ''; //$data[$fecha_completa_verificar]; 
						$str .= '<td class="cell-dia-disabled">'.$cell.'</td>';
					}
					

				} else { // Si no hay datos para el día y horario, muestro la opcion de alta

					// Si existe un Segmento para el día
					if(!empty($segmento_actual)){
						// El contenido de cada Celda
						$contenido = "";

						// Si el Segmento no esta Habilitdo
						if($segmento_actual['comienzo_segmento'] < $i AND $segmento_actual['fin_segmento'] < $i ){
							$class = ' class="cell-dia-disabled" ';
							$str .= '<td '.$class.'>&nbsp;</td>';
						}
						if($segmento_actual['comienzo_segmento'] > $i AND $segmento_actual['fin_segmento'] > $i ){
							$class = ' class="cell-dia-disabled" ';
							$str .= '<td '.$class.'>&nbsp;</td>';
						}

						// Si el Segmento esta Habilitdo
						if($segmento_actual['comienzo_segmento'] <= $i AND $segmento_actual['fin_segmento'] >= $i ){

							//$nombre_div = 'alta_turno_calendario_'.$arreglo_dias_puro[$j].date("Hi",mktime(0,$i,0,0,0,0));
		
							if($disabledCell){
								$str .= '<td>'.$cell.'</td>';
							}else{
							     $str .= "<td $class 
                                    onmouseover=\"document.getElementById('$nombre_div').style.display='block';\" 
                                    onmouseout=\"document.getElementById('$nombre_div').style.display='none';\">$cell
                                    <div id='$nombre_div' style=\"display: none;\">
                                        <a href=\"javascript:MostrarModal('ventana_modal','Carga de Turno','/turnos/add/{$arreglo_dias_controlador[$j]}".date("/H/i",mktime(0,$i,0,0,0,0))."/$id_profesional/N',440,400)\">
                                        Solicitar Turno</a></div></td>";

                            }
						}
					}else{ // Si no existe un Segmento para el día
						$class = ' class="cell-dia-disabled" ';
						$str .= '<td '.$class.'>&nbsp;</td>';
					}
				}
			}

			$str .= '
				  </tr>
			';
		}

		$str .= '
			</tbody>
			</table>
		';
        //$this->Session->write('HayTurnosDisponibles',$HayTurnosDisponibles);
		return $str;
	}
}
?>
